home *** CD-ROM | disk | FTP | other *** search
/ ASME's Mechanical Engine…ing Toolkit 1997 December / ASME's Mechanical Engineering Toolkit 1997 December.iso / basic / mort.bas < prev    next >
BASIC Source File  |  1987-04-17  |  10KB  |  287 lines

  1. 10 REM Computer Mortgage Program
  2. 20 REM Version 0.01 (C)Copyright T Herrmann 1986
  3. 30 REM Licensed Material - Program Property of TH
  4. 40 REM Author - Terry J. Herrmann
  5. 50 DEF SEG
  6. 60 KEY OFF:SCREEN 0,1:COLOR  0,3,1:WIDTH 40:CLS:LOCATE 5,19:PRINT "IBM"
  7. 70 LOCATE 7,12,0:PRINT "Personal Computer"
  8. 80 COLOR 10,0:LOCATE 10,9,0:PRINT CHR$(213)+STRING$(21,205)+CHR$(184)
  9. 90 LOCATE 11,9,0:PRINT CHR$(179)+"      MORTGAGE       "+CHR$(179)
  10. 100 LOCATE 12,9,0:PRINT CHR$(179)+STRING$(21,32)+CHR$(179)
  11. 110 LOCATE 13,9,0:PRINT CHR$(179)+"    Version 0.01     "+CHR$(179)
  12. 120 LOCATE 14,9,0:PRINT CHR$(212)+STRING$(21,205)+CHR$(190)
  13. 130 COLOR 15,0:LOCATE 17,4,0:PRINT "(C) Copyright T. Herrmann  1986"
  14. 140 COLOR 14,0:LOCATE 23,7,0:PRINT "Press space bar to continue"
  15. 150 IF INKEY$ <> "" THEN GOTO 150
  16. 160 CMD$ = INKEY$
  17. 170 IF CMD$ = " " THEN GOTO 200
  18. 180 IF CMD$ =CHR$(27) THEN GOTO 300
  19. 190 GOTO 160
  20. 200 COLOR 15,0:CLS:DEFDBL P:DIM AMORT(500,2):SCREEN 0
  21. 210 DEF SEG=0
  22. 220 IF (PEEK(&H410) AND &H30)<>&H30 THEN COLS = 3:GOTO 240
  23. 230 WIDTH 80:COLS=8
  24. 240 DEF SEG
  25. 250 GOSUB 340
  26. 260 IF ASC(I$)=27 THEN 300
  27. 270 IF MID$(I$,1,1)="2" THEN GOTO 1160
  28. 280 IF MID$(I$,1,1)="1" THEN GOTO 600
  29. 290 GOTO 250
  30. 300 IF SAMPLES$ <> "YES" THEN GOTO 320
  31. 310 CHAIN "SAMPLES",1000
  32. 320 GOSUB 580
  33. 330 END
  34. 340 REM - MAIN OPTION MENU
  35. 350 CLS:COLOR 4,7 :PRINT " MORTGAGE ANALYSIS "
  36. 360 LOCATE 3,1:PRINT "OPTIONS - "
  37. 370 PRINT "1 - MORTGAGE PAYMENT COMPARISONS "
  38. 380 PRINT "2 - MORTGAGE AMORTIZATION"
  39. 390 PRINT "ESC KEY - EXIT"
  40. 400 PRINT""
  41. 410 PRINT "OPTION NUMBER (1,2, OR ESC) =====>"
  42. 420 PRINT "NOTE: PRESS THE ENTER KEY WHEN DONE"
  43. 430 PRINT ""
  44. 440 COLOR 0,3,1
  45. 450 PRINT CHR$(218)+STRING$(37,CHR$(196))+CHR$(191)
  46. 460 PRINT CHR$(179)+"  MORTGAGE PAYMENT COMPARISONS       "+CHR$(179)
  47. 470 PRINT CHR$(179)+"    - USE THIS OPTION TO COMPARE     "+CHR$(179)
  48. 480 PRINT CHR$(179)+"      THE MONTHLY PAYMENTS OF        "+CHR$(179)
  49. 490 PRINT CHR$(179)+"      MORTGAGES AT VARIOUS RATES     "+CHR$(179)
  50. 500 PRINT CHR$(179)+"      AND PRINCIPAL AMOUNTS.         "+CHR$(179)
  51. 510 PRINT CHR$(179)+"  MORTGAGE AMORTIZATION              "+CHR$(179)
  52. 520 PRINT CHR$(179)+"    - USE THIS OPTION TO CALCULATE   "+CHR$(179)
  53. 530 PRINT CHR$(179)+"      THE PRINCIPAL AND INTEREST     "+CHR$(179)
  54. 540 PRINT CHR$(179)+"      PAID OVER ANY 12 MONTH PERIOD. "+CHR$(179)
  55. 550 PRINT CHR$(192)+STRING$(37,CHR$(196))+CHR$(217)
  56. 560 COLOR 0,7:LOCATE 8,37:PRINT " ":LOCATE 8,37
  57. 570 I$=INKEY$:IF I$="" THEN 570 ELSE PRINT I$;:RETURN
  58. 580 CLS:END
  59. 590 PF = AF*(RF/(1#-(1#/((1#+RF)^NF)))):RETURN
  60. 600 REM - mortgage comparisons
  61. 610 COLOR 8,4,1
  62. 620 CLS:PRINT " MORTGAGE PAYMENT COMPARISON PROGRAM "
  63. 630 LOCATE 10,1
  64. 640 COLOR 0,3,1
  65. 650 PRINT CHR$(218)+STRING$(37,CHR$(196))+CHR$(191)
  66. 660 PRINT CHR$(179)+"  MORTGAGE PAYMENT COMPARISONS       "+CHR$(179)
  67. 670 PRINT CHR$(179)+"    - USE THIS OPTION TO COMPARE     "+CHR$(179)
  68. 680 PRINT CHR$(179)+"      THE MONTHLY PAYMENTS OF        "+CHR$(179)
  69. 690 PRINT CHR$(179)+"      MORTGAGES AT VARIOUS RATES     "+CHR$(179)
  70. 700 PRINT CHR$(179)+"      AND PRINCIPAL AMOUNTS.         "+CHR$(179)
  71. 710 PRINT CHR$(179)+"                                     "+CHR$(179)
  72. 720 PRINT CHR$(179)+"  NOTE: TO SELECT A VALUE OR AMOUNT  "+CHR$(179)
  73. 730 PRINT CHR$(179)+"      ENTER THE APPROPRIATE VALUE    "+CHR$(179)
  74. 740 PRINT CHR$(179)+"      AND PRESS THE ENTER KEY.       "+CHR$(179)
  75. 750 PRINT CHR$(192)+STRING$(37,CHR$(196))+CHR$(217)
  76. 760 COLOR 14,6
  77. 770 LOCATE 3,1:LINE INPUT "ENTER BASE MORTGAGE AMOUNT ===> ";A$
  78. 780 A = VAL(A$):IF A <= 0 THEN GOTO 730
  79. 790 AINC = 2000
  80. 800 LOCATE 4,1:PRINT SPC(38);
  81. 810 LOCATE 5,1:PRINT "(1 TO 35 PERCENT)";
  82. 820 LOCATE 4,1:LINE INPUT "ENTER BASE INTEREST RATE =====> ";IR$
  83. 830 IR = VAL(IR$):IF IR>35 OR IR<1 THEN GOTO 800
  84. 840 R = IR/1200:RINC = .0025/12
  85. 850 LOCATE 5,1:PRINT SPC(38);
  86. 860 LOCATE 6,1:PRINT "(1 TO 35 YEARS)";
  87. 870 LOCATE 5,1:LINE INPUT "ENTER NUMBER OF YEARS IN MTG => ";Y$
  88. 880 Y = VAL(Y$)
  89. 890 N = Y * 12
  90. 900 NF = N
  91. 910 IF NF>420 OR NF<1 THEN GOTO 850
  92. 920 CLS
  93. 930 COLOR 0,7:PRINT " MONTHLY MORTGAGE PAYMENT COMPARISONS "
  94. 940 COLOR 15,0:LOCATE 3,10:PRINT Y$+"-YEAR MORTGAGE LOAN AMOUNTS";
  95. 950 LOCATE 5,2:PRINT "RATES";
  96. 960 FOR I = 0 TO COLS
  97. 970 LOCATE 4,9+I*8:PRINT SPC(7):LOCATE 4,9+I*8:PRINT A+I*AINC
  98. 980 NEXT I
  99. 990 FOR I = 0 TO 14
  100. 1000 LOCATE 6+I,1:PRINT SPC(7):LOCATE 6+I,2
  101. 1010 PRINT USING "##.##";INT(((R+(I*RINC))*120000!)+.5)/100
  102. 1020 NEXT I
  103. 1030 COLOR 15,0
  104. 1040 FOR I = 0 TO 14
  105. 1050 RF = R+I*RINC:AF=1:GOSUB 590
  106. 1060 FOR J = 0 TO COLS
  107. 1070 P = PF*(A+J*AINC):P = INT((P+5.000001E-03)*100)/100
  108. 1080 IF P>10000 THEN LOCATE 22,1:PRINT "PAYMENTS TOO LARGE TO DISPLAY":GOTO 1130
  109. 1090 LOCATE 6+I,9+J*8:PRINT USING "####.##";P;
  110. 1100 NEXT J
  111. 1110 NEXT I
  112. 1120 PRINT " "
  113. 1130 PRINT "PRESS SPACE BAR TO CONTINUE";
  114. 1140 IF INKEY$ <> " " THEN GOTO 1140
  115. 1150 GOTO 250
  116. 1160 REM - mortgage amortization
  117. 1170 COLOR 7,0
  118. 1180 CLS
  119. 1190 COLOR 0,7
  120. 1200 LOCATE 1,1
  121. 1210 COLOR 8,4,1
  122. 1220 PRINT " MORTGAGE AMORTIZATION PROGRAM "
  123. 1230 LOCATE 10,1:COLOR 15,0
  124. 1240 COLOR 0,3,1
  125. 1250 PRINT CHR$(218)+STRING$(37,CHR$(196))+CHR$(191)
  126. 1260 PRINT CHR$(179)+"  MORTGAGE AMORTIZATION              "+CHR$(179)
  127. 1270 PRINT CHR$(179)+"    - USE THIS OPTION TO CALCULATE   "+CHR$(179)
  128. 1280 PRINT CHR$(179)+"      THE PRINCIPAL AND INTEREST     "+CHR$(179)
  129. 1290 PRINT CHR$(179)+"      PAID OVER ANY 12 MONTH PERIOD. "+CHR$(179)
  130. 1300 PRINT CHR$(179)+"                                     "+CHR$(179)
  131. 1310 PRINT CHR$(179)+"  NOTE: TO SELECT A VALUE OR AMOUNT  "+CHR$(179)
  132. 1320 PRINT CHR$(179)+"      ENTER THE APPROPRIATE VALUE    "+CHR$(179)
  133. 1330 PRINT CHR$(179)+"      AND PRESS THE ENTER KEY.       "+CHR$(179)
  134. 1340 PRINT CHR$(192)+STRING$(37,CHR$(196))+CHR$(217)
  135. 1350 LOCATE 3,1
  136. 1360 COLOR 4,7
  137. 1370 PRINT:INPUT"   SCREEN/PRINTER OUTPUT (S/P)";O$
  138. 1380 IF O$="P" THEN 2110
  139. 1390 LINE INPUT "ENTER MORTGAGE AMOUNT ===> ";A$
  140. 1400 AF = VAL(A$)
  141. 1410 LOCATE 4,1
  142. 1420 PRINT "                                      ";
  143. 1430 LOCATE 5,1
  144. 1440 PRINT "(1 TO 35 PERCENT)";
  145. 1450 LOCATE 4,1
  146. 1460 LINE INPUT "ENTER INTEREST RATE =====> ";IR$
  147. 1470 IR = VAL(IR$)
  148. 1480 IF IR>35 THEN GOTO 1410
  149. 1490 IF IR<1 THEN GOTO 1410
  150. 1500 RF = IR/1200
  151. 1510 LOCATE 5,1
  152. 1520 PRINT "                                      ";
  153. 1530 LOCATE 6,1
  154. 1540 PRINT "(1 TO 35 YEARS)";
  155. 1550 LOCATE 5,1
  156. 1560 LINE INPUT "ENTER NUMBER OF YEARS ===> ";Y$
  157. 1570 Y = VAL(Y$)
  158. 1580 NF = Y * 12
  159. 1590 IF NF>420 THEN GOTO 1510
  160. 1600 IF NF<1 THEN GOTO 1510
  161. 1610 GOSUB 590
  162. 1620 PF = INT((PF+5.000001E-03)*100)/100
  163. 1630 PRINT "MONTHLY PAYMENTS ARE ====>";PF
  164. 1640 COLOR 13,12
  165. 1650 PRINT "CALCULATING AMORTIZATION"
  166. 1660 COLOR 15,0
  167. 1670 IF NF>36 THEN GOTO 1690
  168. 1680 FOR I = 1 TO 1000:NEXT I
  169. 1690 AMORT(0,1) = AF
  170. 1700 FOR I = 1 TO NF
  171. 1710 AMORT(I,2) = INT((AMORT(I-1,1)*RF+5.000001E-03)*100)/100
  172. 1720 AMORT(I,1) = AMORT(I-1,1)-PF+AMORT(I,2)
  173. 1730 NEXT I
  174. 1740 FOR I = 7 TO 25:LOCATE I,1:PRINT SPC(39);:NEXT I
  175. 1750 LOCATE 9,1
  176. 1760 PRINT " - 1 TO"+STR$(NF)
  177. 1770 PRINT " - 0 TO END AMORTIZATION";
  178. 1780 LOCATE 7,1
  179. 1790 PRINT "ENTER BEGINNING PAYMENT NUMBER"
  180. 1800 LINE INPUT "OF (12 MONTH MAX) PERIOD ===> ";PERIOD$
  181. 1810 PD= VAL(PERIOD$)
  182. 1820 IF PD <> 0 THEN GOTO 1840
  183. 1830 IF PERIOD$ <> "0" THEN GOTO 1780
  184. 1840 IF PD=0 THEN GOTO 250
  185. 1850 IF PD>NF THEN GOTO 1780
  186. 1860 IF PD<0 THEN GOTO 1780
  187. 1870 PRINT:PRINT:INPUT "FOR HOW MANY MONTHS =====> ";MO
  188. 1880 LOCATE 7,1
  189. 1890 PRINT SPC(39)
  190. 1900 PRINT SPC(39)
  191. 1910 LOCATE 9,1
  192. 1920 PRINT "PYMNT PRINCIPAL   INTEREST    BALANCE"
  193. 1930 TINT = 0
  194. 1940 FOR I = PD TO PD+MO-1
  195. 1950 IF I> NF THEN GOTO 1990
  196. 1960 TINT = TINT + AMORT(I,2)
  197. 1970 PRINT USING "### ";I;
  198. 1980 PRINT USING "  ######.##";PF-AMORT(I,2);AMORT(I,2);AMORT(I,1)
  199. 1990 NEXT I
  200. 2000 PRINT " "
  201. 2010 PRINT "INTEREST FOR";MO;"PERIODS =";
  202. 2020 PRINT USING "######.## ";TINT
  203. 2030 LOCATE 25,1
  204. 2040 PRINT "PRESS SPACE BAR TO CONTINUE";
  205. 2050 LOCATE ,,0
  206. 2060 IF INKEY$ <> "" THEN GOTO 2060
  207. 2070 CMD$ = INKEY$
  208. 2080 IF CMD$ = " " THEN GOTO 1740
  209. 2090 IF CMD$ =CHR$(27) THEN GOTO 300
  210. 2100 GOTO 2070
  211. 2110 LINE INPUT "ENTER MORTGAGE AMOUNT ===> ";A$
  212. 2120 LPRINT:LPRINT"MORTGAGE AMOUNT => $";A$
  213. 2130 AF = VAL(A$)
  214. 2140 LOCATE 6,1
  215. 2150 PRINT "                                      ";
  216. 2160 LOCATE 7,1
  217. 2170 PRINT "(1 TO 35 PERCENT)";
  218. 2180 LOCATE 6,1
  219. 2190 LINE INPUT "ENTER INTEREST RATE =====> ";IR$
  220. 2200 LPRINT:LPRINT"INTEREST RATE ===>  ";IR$;"%"
  221. 2210 IR = VAL(IR$)
  222. 2220 IF IR>35 THEN GOTO 2140
  223. 2230 IF IR<1 THEN GOTO 2140
  224. 2240 RF = IR/1200
  225. 2250 LOCATE 7,1
  226. 2260 PRINT "                                      ";
  227. 2270 LOCATE 8,1
  228. 2280 PRINT "(1 TO 35 YEARS)";
  229. 2290 LOCATE 7,1
  230. 2300 LINE INPUT "ENTER NUMBER OF YEARS ===> ";Y$
  231. 2310 LPRINT"# YEARS OF MORT.=>  ";Y$
  232. 2320 Y = VAL(Y$)
  233. 2330 NF = Y * 12
  234. 2340 IF NF>420 THEN GOTO 2250
  235. 2350 IF NF<1 THEN GOTO 2250
  236. 2360 GOSUB 590
  237. 2370 PF = INT((PF+5.000001E-03)*100)/100
  238. 2380 PRINT "MONTHLY PAYMENTS ARE ====>";PF
  239. 2390 LPRINT"MONTHLY PAYMENT => $";PF
  240. 2400 COLOR 13,12
  241. 2410 PRINT "CALCULATING AMORTIZATION"
  242. 2420 COLOR 15,0
  243. 2430 IF NF>36 THEN GOTO 2450
  244. 2440 FOR I = 1 TO 1000:NEXT I
  245. 2450 AMORT(0,1) = AF
  246. 2460 FOR I = 1 TO NF
  247. 2470 AMORT(I,2) = INT((AMORT(I-1,1)*RF+5.000001E-03)*100)/100
  248. 2480 AMORT(I,1) = AMORT(I-1,1)-PF+AMORT(I,2)
  249. 2490 NEXT I
  250. 2500 FOR I = 7 TO 25:LOCATE I,1:PRINT SPC(39);:NEXT I
  251. 2510 LOCATE 9,1
  252. 2520 PRINT " - 1 TO"+STR$(NF)
  253. 2530 PRINT " - 0 TO END AMORTIZATION";
  254. 2540 LOCATE 7,1
  255. 2550 PRINT "ENTER BEGINNING PAYMENT NUMBER"
  256. 2560 LINE INPUT "OF (12 MONTH MAX) PERIOD ===> ";PERIOD$
  257. 2570 PD= VAL(PERIOD$)
  258. 2580 IF PD <> 0 THEN GOTO 2600
  259. 2590 IF PERIOD$ <> "0" THEN GOTO 2540
  260. 2600 IF PD=0 THEN GOTO 250
  261. 2610 IF PD>NF THEN GOTO 2540
  262. 2620 IF PD<0 THEN GOTO 2540
  263. 2630 PRINT:PRINT:INPUT "FOR HOW MANY MONTHS =====> ";MO
  264. 2640 LOCATE 7,1
  265. 2650 PRINT SPC(39)
  266. 2660 PRINT SPC(39)
  267. 2670 LOCATE 9,1
  268. 2680 LPRINT:LPRINT "PYMNT PRINCIPAL   INTEREST    BALANCE"
  269. 2690 TINT = 0
  270. 2700 FOR I = PD TO PD+MO-1
  271. 2710 IF I> NF THEN GOTO 2750
  272. 2720 TINT = TINT + AMORT(I,2)
  273. 2730 LPRINT USING "### ";I;
  274. 2740 LPRINT USING "  ######.##";PF-AMORT(I,2);AMORT(I,2);AMORT(I,1)
  275. 2750 NEXT I
  276. 2760 LPRINT " "
  277. 2770 LPRINT "INTEREST FOR";MO;"PERIODS =";
  278. 2780 LPRINT USING "######.## ";TINT
  279. 2790 LOCATE 25,1
  280. 2800 PRINT "PRESS SPACE BAR TO CONTINUE";
  281. 2810 LOCATE ,,0
  282. 2820 IF INKEY$ <> "" THEN GOTO 2820
  283. 2830 CMD$ = INKEY$
  284. 2840 IF CMD$ = " " THEN GOTO 2500
  285. 2850 IF CMD$ =CHR$(27) THEN GOTO 300
  286. 2860 GOTO 2830
  287.